package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.common.entity.PageResult;
import com.itheima.common.entity.QueryPageBean;
import com.itheima.mapper.CheckGroupItemMapper;
import com.itheima.mapper.CheckgroupMapper;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckgroupService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class CheckgroupServiceImpl implements CheckgroupService {
    @Autowired
    private CheckgroupMapper checkgroupMapper;
    @Autowired
    private CheckGroupItemMapper checkGroupItemMapper;

    /**
     * 检查组相关功能
     *
     * @param checkGroup
     * @param checkitemIds
     */

    @ApiOperation("新增检查组")
    @Transactional
    public void addChechGroup(CheckGroup checkGroup, List<Integer> checkitemIds) {
        //1、添加检查组的基础信息
        checkgroupMapper.addCheckGroup(checkGroup);

        Integer id = checkGroup.getId();

        //获取到检查组对应的id，在1中就需要获取到
        Map map = new HashMap<>();
        for (Integer checkitemId : checkitemIds) {
            map.put("id", id);
            map.put("checkitemId", checkitemId);
            //插入检查组和检查项的关系
            checkGroupItemMapper.addCheckGroupItem(map);
        }

    }

    /**
     * 分页查询检查组
     * @param queryPageBean
     * @return
     */
    public PageResult pageQuery(QueryPageBean queryPageBean) {
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize()); //自动分页查询

        Page<CheckGroup> page=checkgroupMapper.pageQuery(queryPageBean);
        return new PageResult(page.getTotal(),page.getResult());
    }

    /**
     * 检查组的编辑功能
     * @param checkGroup
     * @param checkitemIds
     */
    @Transactional
    @ApiOperation("检查组的编辑功能")
    public void edit(CheckGroup checkGroup, List<Integer> checkitemIds) {
        //事务管理
        //先编辑基础信息
        checkgroupMapper.editGroup(checkGroup);


        Integer id1 = checkGroup.getId();
        if (id1!=null){
            //根据检查组id，先清空检查组和检查项相相关表数据
            Integer id = checkGroup.getId();
            checkGroupItemMapper.delete(id);

            //获取到检查组对应的id，在1中就需要获取到
            Map map = new HashMap<>();
            for (Integer checkitemId : checkitemIds) {
                map.put("id", id);
                map.put("checkitemId", checkitemId);
                //插入检查组和检查项的关系
                checkGroupItemMapper.addCheckGroupItem(map);
            }
        }
        //再添加关系
    }

    /**
     * 根据id查看检查组信息
     * @param id
     * @return
     */
    public CheckGroup getByid(Integer id) {
        CheckGroup checkGroup=checkgroupMapper.getById(id);
        return checkGroup;
    }

    /**
     * 查询所有检查组
     * @return
     */
    public List<CheckGroup> findAllCheckGroup() {
        List<CheckGroup> list=checkgroupMapper.findAllCheckGroup();
        return list;
    }
}
